API: gtk: Add gtk_symbolic_color_to_string()
authorBenjamin Otte <otte@redhat.com>
Wed, 6 Apr 2011 19:41:42 +0000 (21:41 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 18 May 2011 19:58:43 +0000 (21:58 +0200)
See future commits for why this is useful. Or try to debug some color
problem.

docs/reference/gtk/gtk3-sections.txt
gtk/gtk.symbols
gtk/gtksymboliccolor.c
gtk/gtksymboliccolor.h

index d995d71567d2a8d7308680d71bdf5ae62d42886c..1fed765efef96af02bd299ae701d276f84957549 100644 (file)
@@ -5728,6 +5728,7 @@ gtk_symbolic_color_new_mix
 gtk_symbolic_color_ref
 gtk_symbolic_color_unref
 gtk_symbolic_color_resolve
+gtk_symbolic_color_to_string
 
 <SUBSECTION Standard>
 GTK_TYPE_SYMBOLIC_COLOR
index 33fb915dfe3af20ca9cbb954034be3cf3f2e8cb0..643bc3507cbffd142f8b615b82f758ba4ba23077 100644 (file)
@@ -2548,6 +2548,7 @@ gtk_symbolic_color_new_name
 gtk_symbolic_color_new_shade
 gtk_symbolic_color_ref
 gtk_symbolic_color_resolve
+gtk_symbolic_color_to_string
 gtk_symbolic_color_unref
 gtk_table_attach
 gtk_table_attach_defaults
index ee7b714550a1299b9e37bdb44882865132079f75..a359fe1fea18b6f91183ad71dd0bb4e2a311915f 100644 (file)
@@ -560,3 +560,70 @@ gtk_symbolic_color_resolve (GtkSymbolicColor   *color,
 
   return FALSE;
 }
+
+/**
+ * gtk_symbolic_color_to_string:
+ * @color: color to convert to a string
+ *
+ * Converts the given @color to a string representation. This is useful
+ * both for debugging and for serialization of strings. The format of
+ * the string may change between different versions of GTK, but it is
+ * guaranteed that the GTK css parser is able to read the string and
+ * create the same symbolic color from it.
+ *
+ * Returns: a new string representing @color
+ **/
+char *
+gtk_symbolic_color_to_string (GtkSymbolicColor *color)
+{
+  char *s;
+
+  g_return_val_if_fail (color != NULL, NULL);
+
+  switch (color->type)
+    {
+    case COLOR_TYPE_LITERAL:
+      s = gdk_rgba_to_string (&color->color);
+      break;
+    case COLOR_TYPE_NAME:
+      s = g_strconcat ("@", color->name, NULL);
+      break;
+    case COLOR_TYPE_SHADE:
+      {
+        char *color_string = gtk_symbolic_color_to_string (color->shade.color);
+        char factor[G_ASCII_DTOSTR_BUF_SIZE];
+
+        g_ascii_dtostr (factor, sizeof (factor), color->shade.factor);
+        s = g_strdup_printf ("shade (%s, %s)", color_string, factor);
+        g_free (color_string);
+      }
+      break;
+    case COLOR_TYPE_ALPHA:
+      {
+        char *color_string = gtk_symbolic_color_to_string (color->shade.color);
+        char factor[G_ASCII_DTOSTR_BUF_SIZE];
+
+        g_ascii_dtostr (factor, sizeof (factor), color->alpha.factor);
+        s = g_strdup_printf ("alpha (%s, %s)", color_string, factor);
+        g_free (color_string);
+      }
+      break;
+    case COLOR_TYPE_MIX:
+      {
+        char *color_string1 = gtk_symbolic_color_to_string (color->mix.color1);
+        char *color_string2 = gtk_symbolic_color_to_string (color->mix.color2);
+        char factor[G_ASCII_DTOSTR_BUF_SIZE];
+
+        g_ascii_dtostr (factor, sizeof (factor), color->mix.factor);
+        s = g_strdup_printf ("mix (%s, %s, %s)", color_string1, color_string2, factor);
+        g_free (color_string1);
+        g_free (color_string2);
+      }
+      break;
+    default:
+      g_assert_not_reached ();
+    }
+
+  return s;
+
+}
index 4f4b8137b41b9e574402a9e9ce306ecc833a066b..7be051a866d99a20a377bc8560865368d9919120 100644 (file)
@@ -46,6 +46,8 @@ GtkSymbolicColor * gtk_symbolic_color_new_mix     (GtkSymbolicColor   *color1,
 GtkSymbolicColor * gtk_symbolic_color_ref         (GtkSymbolicColor   *color);
 void               gtk_symbolic_color_unref       (GtkSymbolicColor   *color);
 
+char *             gtk_symbolic_color_to_string   (GtkSymbolicColor   *color);
+
 gboolean           gtk_symbolic_color_resolve     (GtkSymbolicColor   *color,
                                                    GtkStyleProperties *props,
                                                    GdkRGBA            *resolved_color);